<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // var obj = {
        //   a: 1,
        //   foo: function () {
        //     console.log(this);
        //     function t() {
        //       console.log(this)
        //     }
        //     t()
        //   }
        // }
        // obj.foo()

        //   class Teacher {
        //     constructor() {
        //       this.a = 1;
        //       this.bar = function () {
        //         console.log('bar')
        //       }
        //       // return { b: 222 }
        //     }
        //     foo() {
        //       console.log('foo')
        //     }
        //     static lalal() { }
        //   }
        //   // new的过程。在constructor中产生一个this，
        //   // 把constructor上赋值。把constructor之外的方法放在this.__proto__上，然后默认return this
        //   // 如果在constructor中返回了别的对，则覆盖掉了返回的this
        //   let teacher = new Teacher();
        //   // console.log(Teacher.prototype)
        //   // console.log(teacher)

        //   // 把{ a: 1} 放在obj的__proto__上
        //   const obj = Object.create({ a: 1 });
        //   // console.log(obj.a)
        //   // obj.a = 2
        //   // console.log(obj.a)
        //   // delete obj.a
        //   // console.log(obj.a)

        //   console.log(obj.__proto__)
        //   console.log({ a: 1 })
        //   obj.__proto__ = { foo: () => { alert(111) } }
        //   console.log(obj.foo())

        // const obj = Object.create({ a: 1 })
        // // const objString = Object.create('aaa');
        // // const objBoolean = Object.create(false);
        // const objArray = Object.create([1, 2]);
        // // const objNum = Object.create(222);
        // const objNull = Object.create(null);
        // // const objUndefined = Object.create(undefined);
        // const objFunc = Object.create(() => { });
        // console.log(obj)
        // // console.log(objString)
        // // console.log(objBoolean)
        // console.log(objArray)
        // // console.log(objNum)
        // console.log(objNull)
        // // console.log(objUndefined)
        // console.log(objFunc)


        function Person1() {
            this.foo = function() {
                return this
            };
            this.foo = () => {
                return this
            };
        }
        const person = new Person1();
        person.name = 'person';
        const person2 = {
            name: 'person2',
            foo: person.foo
        };
        console.log(person2.foo())
    </script>
</body>

</html>